// Partial: 都变成可选的
/* type Props = {
  id: string
  children: number[]
}

type PartialProps = Partial<Props>
const o:PartialProps = {
  id: '8'
} */

// Required: 都变成必选的
/* type Props = {
  id?: string
  children?: number[]
}
type RequiredProps = Required<Props> */


// Readonly: 只读
/* type Props = {
  // 表示只读的 id
  // readonly id?: string
  id?: string
  children?: number[]
}

type ReadonlyProps = Readonly<Props>
const o:ReadonlyProps = { id: '888', children: [8] }

o.id = '999' */

// Pick: 从已有类型里面摘出来想要的部分
/* interface Props {
  id: string
  title: string
  children: number[]
}

type PickProps = Pick<Props, 'id' | 'title'>

const o: PickProps = {
  id: '888',
  title: '将军',
} */

// Omit: 排除
interface Props {
  id: string
  title: string
  children: number[]
}

type OmitProps = Omit<Props, 'children'>

const o: OmitProps = {
  id: '888',
  title: '将军',
}

// never 一般用于函数的返回值，【表示无法到达的终点】
/* function test(): never {
  throw new Error('Error')
} */

export { }